package com.station.Activitys.fragment;

import android.os.Bundle;
import android.os.Handler;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

import com.scwang.smartrefresh.header.MaterialHeader;
import com.scwang.smartrefresh.layout.SmartRefreshLayout;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener;
import com.scwang.smartrefresh.layout.listener.OnRefreshListener;
import com.station.Activitys.R;
import com.station.Activitys.activity.MyTestMsgDetailsActivity;
import com.station.Activitys.activity.MyTestMsgSubmitActivity;
import com.station.Activitys.adapter.MyTestMsgAdapter;
import com.station.Activitys.adapter.base.BaseRecyclerViewAdapter;
import com.station.Activitys.bean.MyTest;
import com.station.Activitys.bean.MyTestMsg;
import com.station.Activitys.fragment.base.BaseFragment;
import com.station.Activitys.http.manager.WorkManager;
import com.station.Activitys.utils.CacheManger;
import com.station.Activitys.utils.Constant;
import com.station.Activitys.utils.JumperUtils;
import com.station.Activitys.utils.ToastUtils;
import com.zhy.autolayout.AutoRelativeLayout;

import org.simple.eventbus.Subscriber;
import org.simple.eventbus.ThreadMode;

import java.util.ArrayList;
import java.util.List;

import butterknife.Bind;

/**
 * 项目名称：基站管理平台 手机app
 * 类描述：我的验收信息 Fragment
 * 创建人：张飞祥
 * 创建时间：2018/10/23 9:38
 * 修改人：张飞祥
 * 修改时间：2018/10/23 9:38
 * 修改备注：
 */
public class MyTestMsgFragment extends BaseFragment {

    //TODO 刷新
    //刷新主体控制器
    @Bind(R.id.layout_refresh)
    SmartRefreshLayout layoutRefresh;
    //下拉刷新
    @Bind(R.id.header_material)
    MaterialHeader headerMaterial;
    //列表视图
    @Bind(R.id.rv_list)
    RecyclerView rvList;

    //TODO 无数据视图
    //无数据总布局
    @Bind(R.id.layout_not)
    AutoRelativeLayout layoutNot;
    //无数据图片
    @Bind(R.id.iv_not_data) ImageView ivNotData;
    //无数据文字
    @Bind(R.id.tv_not_data) TextView tvNotData;

    //适配器
    private MyTestMsgAdapter mAdapter = null;
    //数据源
    private List<MyTest> mTestList = null;

    //TODO http 变量
    //搜索 标题
    private String mSearchStr = "";
    //请求哪一页
    private int mIndex = 1;
    //每页几条
    private int mPageCount = 10;
    //上拉加载数据粘性 flag
    public boolean mFootFlag = true;
    //上拉加载 没有数据 page 是否 +1
    private boolean mPullPageFlag = true;

    //TODO 初始化网络请求
    public WorkManager mApiManager;

    @Override
    protected void initViews() {
        //网络请求接口 常驻方法
        mApiManager = mApiManager.getWorkApiManager(getActivity(), getActivity().getTaskId());
        //设置下拉刷新小圆圈 颜色
        headerMaterial.setColorSchemeColors(getResources().getColor(R.color.colorPrimary));
        //获取当前用户
        mUser = CacheManger.getUser(mACache);

        //TODO 下拉刷新
        initPullRefresh();
        //TODO 自动刷新
        layoutRefresh.autoRefresh();
        //TODO 上拉加载
        initLoadMoreListener();
    }

    /**
     * 下拉刷新操作
     */
    private void initPullRefresh() {
        layoutRefresh.setOnRefreshListener(new OnRefreshListener() {
            @Override
            public void onRefresh(RefreshLayout refreshlayout) {
                //TODO 开始刷新
                initHttp();
            }
        });
    }

    /**
     * http 初始化 可验收信息列表 刷新 网络请求
     */
    private void initHttp() {
        //清空列表
        if (mTestList != null && mTestList.size() > 0)
            mTestList.clear();

        //初始化全局 list
        mTestList = new ArrayList<>();
        //设置 为 首次加载
        mApiManager.getType(Constant.FIRST_LOAD);
        //初始化 上拉加载  page 允许 +1
        mPullPageFlag = true;
        //初始化页数
        mIndex = 1;
        //TODO 开始网络请求
        mApiManager.workMyTestMsgList(mUser.getId(), mIndex,mPageCount);
    }

    /**
     * 上拉加载数据
     */
    private void initLoadMoreListener() {
        layoutRefresh.setOnLoadMoreListener(new OnLoadMoreListener() {
            @Override
            public void onLoadMore(RefreshLayout refreshlayout) {
                //设置文字上拉加载更多
                mApiManager.getType(Constant.PULLUP_LOAD_MORE);
                //如果 为 true 可以 查看下一页
                if (mPullPageFlag) {
                    //数据请求
                    mIndex = mIndex + 1;
                }
                //初始化 上拉加载数据 粘性 flag
                mFootFlag = true;
                //TODO 上拉加载 网络请求
                mApiManager.workMyTestMsgList(mUser.getId(), mIndex,mPageCount);
            }
        });
    }

    /**
     * 我的验收信息列表 报错
     */
    @Subscriber(tag = Constant.BUS_WORK_MY_TEST_MSG_LIST_ERROR, mode = ThreadMode.MAIN)
    public void initMyReleaseError(String httpError) {
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                //TODO View 非空判断
                if (layoutRefresh != null) {
                    //结束刷新
                    layoutRefresh.finishRefresh(false);
                    //结束加载
                    layoutRefresh.finishLoadMore(false);
                    //隐藏数据列表控件
                    rvList.setVisibility(View.GONE);
                    //显示无数据控件
                    layoutNot.setVisibility(View.VISIBLE);
                    //设置图片
                    ivNotData.setImageResource(R.drawable.img_not_network);
                    //设置文字
                    tvNotData.setText(Constant.NETWORK_UI_ERROR_MSG);
                }
            }
        }, 1000);
    }


    /**
     * 我的验收信息列表  首次数据加载
     */
    @Subscriber(tag = Constant.BUS_WORK_MY_TEST_MSG_LIST, mode = ThreadMode.MAIN)
    public void initNotice(final MyTestMsg test) {

        //开启延时操作
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                //获取当前集合数据
                final List<MyTest> list = test.getData();
                //TODO View 非空判断
                if (rvList != null ) {
                    if (list != null && list.size() != 0) {
                        //设置 工单处理列表 数据
                        mTestList.addAll(list);
                        //设置 通讯供求 适配器
                        mAdapter = new MyTestMsgAdapter(getActivity(), list) {
                            @Override
                            public void getItemDetails(int position) {
                                //传递数据 到 验收详情页面
                                Bundle bundle = new Bundle();
                                bundle.putSerializable(Constant.INTENT_MY_TEST_BEAN,mTestList.get(position));
                                JumperUtils.JumpTo(getActivity(),MyTestMsgDetailsActivity.class,bundle);
                            }
                        };

                        //添加 适配器 样式
                        rvList.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false));
                        //添加 适配器
                        rvList.setAdapter(mAdapter);

                        //TODO item 点击事件
                        mAdapter.setOnItemClickListener(new BaseRecyclerViewAdapter.OnRecyclerViewItemClickListener() {
                            @Override
                            public void onItemClick(View view, int position) {
                                //状态
                                String state = mTestList.get(position).getState();
                                //实体
                                MyTest myTest = mTestList.get(position);
                                //传递数据
                                Bundle bundle = new Bundle();
                                //当前数据 实体对象
                                bundle.putSerializable(Constant.INTENT_MY_TEST_BEAN,myTest);

                                /**
                                 *  1.待验收，      | 未过验收审核                    进入验收信息提交页面
                                 *  2.待验收审核    | 通过验收审核                    进入验收信息详情页面
                                 */
                                if (state.equals(Constant.STATION_TEST_STAY) || state.equals(Constant.STATION_TEST_NO)){
                                    JumperUtils.JumpTo(getActivity(), MyTestMsgSubmitActivity.class,bundle);
                                }else if (state.equals(Constant.STATION_TEST_STAY_TRIAL) || state.equals(Constant.STATION_TEST_YES)){
                                    JumperUtils.JumpTo(getActivity(),MyTestMsgDetailsActivity.class,bundle);
                                }

                            }
                        });
                        //显示数据列表控件
                        rvList.setVisibility(View.VISIBLE);
                        //隐藏无数据控件
                        layoutNot.setVisibility(View.GONE);
                    } else {
                        //隐藏数据列表控件
                        rvList.setVisibility(View.GONE);
                        //显示无数据控件
                        layoutNot.setVisibility(View.VISIBLE);
                    }
                    //隐藏加载小圆圈
                    layoutRefresh.finishRefresh();
                }else{
                    ToastUtils.showShort(getActivity(),test.getMsg());
                }
            }
        }, 1000);
    }

    /**
     * 我的验收信息列表  上拉加载数据
     */
    @Subscriber(tag = Constant.BUS_WORK_MY_TEST_MSG_LIST_FOOT)
    public void initNoticeFoot(MyTestMsg test) {
        final List<MyTest> footList = test.getData();

        //开启延时操作
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                //TODO View 非空判断
                if (layoutRefresh != null) {
                    /**
                     * 判断是否有数据
                     * 当 返回列表 数据 size 0 没有更多数据可加载了
                     */
                    if (footList.size() == 0) {
                        //page 不允许 + 1
                        mPullPageFlag = false;
                        //显示提示
                        ToastUtils.showShort(getActivity(), "没有更多数据了");
                    } else {
                        //page 允许 + 1
                        mPullPageFlag = true;
                        if (mAdapter != null & mFootFlag == true) {
                            //填充上拉加载数据，加载到adapter里面
                            mTestList.addAll(footList);
                            //加载到adapter里面
                            mAdapter.addFooterItem(footList);
                            //关闭 上拉加载 粘性数据
                            mFootFlag = false;
                        }
                        //显示提示
                        ToastUtils.showShort(getActivity(), "更新了 " + footList.size() + " 条目数据");
                    }
                    //结束加载
                    layoutRefresh.finishLoadMore();
                }
            }
        }, 1000);
    }

    /**
     * 通知刷新数据
     */
    @Subscriber(tag = Constant.BUS_WORK_PUSH)
    public void initPush(String push) {
        //自动刷新
        layoutRefresh.autoRefresh();
    }

    @Override
    protected int getContentViewId() {
        return R.layout.layout_refresh;
    }
}
